/**
 * 前端API更新测试工具
 * 用于在已认证的前端环境中测试PUT /api/v1/admin/items/90 请求
 */

import apiService from '../services/api.js';

/**
 * 测试更新项目90的富文本内容
 * @param {Object} customData - 自定义更新数据（可选）
 * @returns {Promise} API响应结果
 */
export async function testUpdateItem90(customData = null) {
  try {
    // 用户提供的载荷数据
    const updateData = customData || {
      id: 90,
      content: '[{"id":1,"type":"text","content":{"text":"请输入文本内容...\\n请输入文本内容...\\n请输入文本内容...d","fontSize":14,"color":"#333","textAlign":"left","bold":false,"italic":false,"underline":false,"lineThrough":false},"style":{"backgroundColor":"transparent","borderRadius":8,"padding":16,"margin":8,"shadow":false},"animation":"none"}]',
      content_type: 'rich_text',
      // 其他字段设置为空
      icon: '',
      name: '',
      status: ''
    };

    console.log('正在发送PUT请求到 /api/v1/admin/items/90');
    console.log('载荷数据:', JSON.stringify(updateData, null, 2));

    // 使用API服务的update方法
    const result = await apiService.items.update(90, updateData);
    
    console.log('更新成功!');
    console.log('响应数据:', result.data);
    
    return result;
  } catch (error) {
    console.error('更新失败:', error);
    if (error.response) {
      console.error('错误状态码:', error.response.status);
      console.error('错误响应:', error.response.data);
    }
    throw error;
  }
}

/**
 * 使用富文本专用的更新方法测试
 * @param {Object} customData - 自定义更新数据（可选）
 * @returns {Promise} API响应结果
 */
export async function testUpdateRichTextItem90(customData = null) {
  try {
    // 富文本更新数据
    const richTextData = customData || {
      content: '[{"id":1,"type":"text","content":{"text":"请输入文本内容...\\n请输入文本内容...\\n请输入文本内容...d","fontSize":14,"color":"#333","textAlign":"left","bold":false,"italic":false,"underline":false,"lineThrough":false},"style":{"backgroundColor":"transparent","borderRadius":8,"padding":16,"margin":8,"shadow":false},"animation":"none"}]',
      // 其他字段设置为空
      icon: '',
      name: '',
      status: ''
    };

    console.log('正在使用富文本专用方法更新项目90');
    console.log('载荷数据:', JSON.stringify(richTextData, null, 2));

    // 使用API服务的updateRichText方法
    const result = await apiService.items.updateRichText(90, richTextData);
    
    console.log('富文本更新成功!');
    console.log('响应数据:', result.data);
    
    return result;
  } catch (error) {
    console.error('富文本更新失败:', error);
    if (error.response) {
      console.error('错误状态码:', error.response.status);
      console.error('错误响应:', error.response.data);
    }
    throw error;
  }
}

/**
 * 测试最小载荷数据
 * @returns {Promise} API响应结果
 */
export async function testMinimalPayload() {
  try {
    // 最小载荷数据
    const minimalData = {
      content: '[{"id":1,"type":"text","content":{"text":"请输入文本内容...\\n请输入文本内容...\\n请输入文本内容...d","fontSize":14,"color":"#333","textAlign":"left","bold":false,"italic":false,"underline":false,"lineThrough":false},"style":{"backgroundColor":"transparent","borderRadius":8,"padding":16,"margin":8,"shadow":false},"animation":"none"}]',
      content_type: 'rich_text'
    };

    console.log('正在测试最小载荷数据...');
    console.log('载荷数据:', JSON.stringify(minimalData, null, 2));

    const result = await apiService.items.update(90, minimalData);
    
    console.log('最小载荷更新成功!');
    console.log('响应数据:', result.data);
    
    return result;
  } catch (error) {
    console.error('最小载荷更新失败:', error);
    if (error.response) {
      console.error('错误状态码:', error.response.status);
      console.error('错误响应:', error.response.data);
    }
    throw error;
  }
}

/**
 * 测试部分更新 - 只传递需要更新的字段
 * 根据用户需求：传递什么更新什么，不将其他字段置空
 * @returns {Promise} API响应结果
 */
export async function testPartialUpdate() {
  try {
    // 只传递需要更新的字段
    const partialData = {
      content: '[{"id":1,"type":"text","content":{"text":"请输入文本内容...\\n请输入文本内容...\\n请输入文本内容...d","fontSize":14,"color":"#333","textAlign":"left","bold":false,"italic":false,"underline":false,"lineThrough":false},"style":{"backgroundColor":"transparent","borderRadius":8,"padding":16,"margin":8,"shadow":false},"animation":"none"}]',
      content_type: 'rich_text'
      // 注意：不传递其他字段，让后端保持原有值
    };

    console.log('正在发送部分更新请求到 /api/v1/admin/items/90');
    console.log('载荷数据（只包含需要更新的字段）:', JSON.stringify(partialData, null, 2));

    // 使用API服务的update方法
    const result = await apiService.items.update(90, partialData);
    
    console.log('部分更新成功!');
    console.log('响应数据:', result.data);
    
    return result;
  } catch (error) {
    console.error('部分更新失败:', error);
    if (error.response) {
      console.error('错误状态码:', error.response.status);
      console.error('错误响应:', error.response.data);
    }
    throw error;
  }
}

/**
 * 在浏览器控制台中运行所有测试
 * 使用方法：在浏览器控制台中输入 window.testApiUpdate.runAllTests()
 */
export async function runAllTests() {
  console.log('开始测试API更新请求...');
  
  try {
    console.log('\n=== 测试1: 完整载荷更新 ===');
    await testUpdateItem90();
    
    console.log('\n=== 测试2: 富文本专用方法 ===');
    await testUpdateRichTextItem90();
    
    console.log('\n=== 测试3: 最小载荷 ===');
    await testMinimalPayload();
    
    console.log('\n=== 测试4: 部分更新（推荐） ===');
    await testPartialUpdate();
    
    console.log('\n所有测试完成!');
  } catch (error) {
    console.error('测试过程中出现错误:', error);
  }
}

// 将测试函数挂载到window对象，方便在浏览器控制台中调用
if (typeof window !== 'undefined') {
  window.testApiUpdate = {
    testUpdateItem90,
    testUpdateRichTextItem90,
    testMinimalPayload,
    testPartialUpdate,
    runAllTests
  };

  console.log('API测试工具已加载，可在控制台中使用:');
  console.log('- window.testApiUpdate.testUpdateItem90()');
  console.log('- window.testApiUpdate.testUpdateRichTextItem90()');
  console.log('- window.testApiUpdate.testMinimalPayload()');
  console.log('- window.testApiUpdate.testPartialUpdate() // 推荐使用');
  console.log('- window.testApiUpdate.runAllTests()');
}